package day9;

/*
*
* final可以修饰：属性，方法，类，局部变量（方法中的变量）
final修饰的属性的初始化可以在编译期，也可以在运行期，初始化后不能被改变。
final修饰的属性跟具体对象有关，在运行期初始化的final属性，不同对象可以有不同的值。
final修饰的属性表明是一个常数（创建后不能被修改）。
final修饰的方法表示该方法在子类中不能被重写，final修饰的类表示该类不能被继承。
对于基本类型数据，final会将值变为一个常数（创建后不能被修改）；
* 但是对于对象句柄（亦可称作引用或者指针），final会将句柄变为一个常数
* （进行声明时，必须将句柄初始化到一个具体的对象。而且不能再将句柄指向另一个对象。
* 但是，对象的本身是可以修改的。这一限制也适用于数组，数组也属于对象，数组本身也是可以修改的。
* 方法参数中的final句柄，意味着在该方法内部，我们不能改变参数句柄指向的实际东西，
* 也就是说在方法内部不能给形参句柄再另外赋值）。
*
* */
public class TestFinal {
    public static void main(String[] args){
        B b = new B();
        System.out.println("x=" + b.method1(0,1));
    }
}

class A {

    public int method1(int a, int b){
//  final public int method1(int a, int b){
        return 0;
    }
}

class B extends A{
    // final 后的方法不允许重写 overwrite
    public int method1(int a,int b){
        return 1;
    }
}

